{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# In Depth: Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Just as naive Bayes (discussed in [In Depth: Naive Bayes Classification](05.05-Naive-Bayes.ipynb)) is a good starting point for classification tasks, linear regression models are a good starting point for regression tasks.\n",
    "Such models are popular because they can be fit quickly and are straightforward to interpret.\n",
    "You are already familiar with the simplest form of linear regression model (i.e., fitting a straight line to two-dimensional data), but such models can be extended to model more complicated data behavior.\n",
    "\n",
    "In this chapter we will start with a quick walkthrough of the mathematics behind this well-known problem, before moving on to see how linear models can be generalized to account for more complicated patterns in data.\n",
    "\n",
    "We begin with the standard imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "deletable": true,
    "editable": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('seaborn-whitegrid')\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Simple Linear Regression\n",
    "\n",
    "We will start with the most familiar linear regression, a straight-line fit to data.\n",
    "A straight-line fit is a model of the form:\n",
    "$$\n",
    "y = ax + b\n",
    "$$\n",
    "where $a$ is commonly known as the *slope*, and $b$ is commonly known as the *intercept*.\n",
    "\n",
    "Consider the following data, which is scattered about a line with a slope of 2 and an intercept of –5 (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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ZYrH47r//vt18eJFbd261esm5VR9fb3OnTuX/NmyrOTvt7y8XJcvX3Z8bV+NsCsqKtTT05P8OZFIFHRYD3nvvff0ta99TV/60pf0xS9+0evm5MWePXt06NAhNTU1KRaLaf369bpw4YLXzcq5SCSie+65RxMnTtTMmTM1adIkffTRR143K6d++ctf6p577tH+/fv12muvacOGDclyQRAUFd2I2Z6eHk2ePNn5tdxokFvmz5+vjo4OSdKRI0c0a9Ysj1uUex988IFWr16t5uZmrVixwuvm5M2LL76oF154QTt27FBtba2efvppVVZWet2snFuwYIF++9vfyrIsnT9/Xr29vYpEIl43K6cmT56sW265RZI0ZcoUDQwMaHBw8CbfKhx33XWXDh8+LEnq6OjQwoULHV/LV8PXpUuX6uDBg1q5cqUsy9LmzZu9blLObd26VZcuXdJzzz2n5557TtL1hxZBehAXJPfee6/++Mc/asWKFbIsSy0tLQX/3OLrX/+6Nm7cqMbGRvX39+vRRx9VWVmZ183Km/Xr1+v73/++fvzjH2vmzJmqr693fC1WOgKAIXxVEgEApEZgA4AhCGwAMASBDQCGILABwBAENgAYgsAGAEMQ2ABgiP8H96plAZwR07oAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "x = 10 * rng.rand(50)\n",
    "y = 2 * x - 5 + rng.randn(50)\n",
    "plt.scatter(x, y);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We can use Scikit-Learn's `LinearRegression` estimator to fit this data and construct the best-fit line, as shown in the following figure:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "model = LinearRegression(fit_intercept=True)\n",
    "\n",
    "model.fit(x[:, np.newaxis], y)\n",
    "\n",
    "xfit = np.linspace(0, 10, 1000)\n",
    "yfit = model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The slope and intercept of the data are contained in the model's fit parameters, which in Scikit-Learn are always marked by a trailing underscore.\n",
    "Here the relevant parameters are `coef_` and `intercept_`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model slope:     2.0272088103606953\n",
      "Model intercept: -4.998577085553204\n"
     ]
    }
   ],
   "source": [
    "print(\"Model slope:    \", model.coef_[0])\n",
    "print(\"Model intercept:\", model.intercept_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We see that the results are very close to the values used to generate the data, as we might hope."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The `LinearRegression` estimator is much more capable than this, however—in addition to simple straight-line fits, it can also handle multidimensional linear models of the form:\n",
    "$$\n",
    "y = a_0 + a_1 x_1 + a_2 x_2 + \\cdots\n",
    "$$\n",
    "where there are multiple $x$ values.\n",
    "Geometrically, this is akin to fitting a plane to points in three dimensions, or fitting a hyperplane to points in higher dimensions.\n",
    "\n",
    "The multidimensional nature of such regressions makes them more difficult to visualize, but we can see one of these fits in action by building some example data, using NumPy's matrix multiplication operator:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.50000000000001\n",
      "[ 1.5 -2.   1. ]\n"
     ]
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "X = 10 * rng.rand(100, 3)\n",
    "y = 0.5 + np.dot(X, [1.5, -2., 1.])\n",
    "\n",
    "model.fit(X, y)\n",
    "print(model.intercept_)\n",
    "print(model.coef_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Here the $y$ data is constructed from a linear combination of three random $x$ values, and the linear regression recovers the coefficients used to construct the data.\n",
    "\n",
    "In this way, we can use the single `LinearRegression` estimator to fit lines, planes, or hyperplanes to our data.\n",
    "It still appears that this approach would be limited to strictly linear relationships between variables, but it turns out we can relax this as well."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Basis Function Regression\n",
    "\n",
    "One trick you can use to adapt linear regression to nonlinear relationships between variables is to transform the data according to *basis functions*.\n",
    "We have seen one version of this before, in the `PolynomialRegression` pipeline used in [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) and [Feature Engineering](05.04-Feature-Engineering.ipynb).\n",
    "The idea is to take our multidimensional linear model:\n",
    "$$\n",
    "y = a_0 + a_1 x_1 + a_2 x_2 + a_3 x_3 + \\cdots\n",
    "$$\n",
    "and build the $x_1, x_2, x_3,$ and so on from our single-dimensional input $x$.\n",
    "That is, we let $x_n = f_n(x)$, where $f_n()$ is some function that transforms our data.\n",
    "\n",
    "For example, if $f_n(x) = x^n$, our model becomes a polynomial regression:\n",
    "$$\n",
    "y = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \\cdots\n",
    "$$\n",
    "Notice that this is *still a linear model*—the linearity refers to the fact that the coefficients $a_n$ never multiply or divide each other.\n",
    "What we have effectively done is taken our one-dimensional $x$ values and projected them into a higher dimension, so that a linear fit can fit more complicated relationships between $x$ and $y$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Polynomial Basis Functions\n",
    "\n",
    "This polynomial projection is useful enough that it is built into Scikit-Learn, using the `PolynomialFeatures` transformer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.,  4.,  8.],\n",
       "       [ 3.,  9., 27.],\n",
       "       [ 4., 16., 64.]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "x = np.array([2, 3, 4])\n",
    "poly = PolynomialFeatures(3, include_bias=False)\n",
    "poly.fit_transform(x[:, None])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We see here that the transformer has converted our one-dimensional array into a three-dimensional array, where each column contains the exponentiated value.\n",
    "This new, higher-dimensional data representation can then be plugged into a linear regression.\n",
    "\n",
    "As we saw in [Feature Engineering](05.04-Feature-Engineering.ipynb), the cleanest way to accomplish this is to use a pipeline.\n",
    "Let's make a 7th-degree polynomial model in this way:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "deletable": true,
    "editable": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "from sklearn.pipeline import make_pipeline\n",
    "poly_model = make_pipeline(PolynomialFeatures(7),\n",
    "                           LinearRegression())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "With this transform in place, we can use the linear model to fit much more complicated relationships between $x$ and $y$. \n",
    "For example, here is a sine wave with noise (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(1)\n",
    "x = 10 * rng.rand(50)\n",
    "y = np.sin(x) + 0.1 * rng.randn(50)\n",
    "\n",
    "poly_model.fit(x[:, np.newaxis], y)\n",
    "yfit = poly_model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Our linear model, through the use of seventh-order polynomial basis functions, can provide an excellent fit to this nonlinear data!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Gaussian Basis Functions\n",
    "\n",
    "Of course, other basis functions are possible.\n",
    "For example, one useful pattern is to fit a model that is not a sum of polynomial bases, but a sum of Gaussian bases.\n",
    "The result might look something like the following figure:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "![](images/05.06-gaussian-basis.png)\n",
    "\n",
    "[figure source in Appendix](https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/06.00-Figure-Code.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The shaded regions in the plot are the scaled basis functions, and when added together they reproduce the smooth curve through the data.\n",
    "These Gaussian basis functions are not built into Scikit-Learn, but we can write a custom transformer that will create them, as shown here and illustrated in the following figure (Scikit-Learn transformers are implemented as Python classes; reading Scikit-Learn's source is a good way to see how they can be created):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.base import BaseEstimator, TransformerMixin\n",
    "\n",
    "class GaussianFeatures(BaseEstimator, TransformerMixin):\n",
    "    \"\"\"Uniformly spaced Gaussian features for one-dimensional input\"\"\"\n",
    "    \n",
    "    def __init__(self, N, width_factor=2.0):\n",
    "        self.N = N\n",
    "        self.width_factor = width_factor\n",
    "    \n",
    "    @staticmethod\n",
    "    def _gauss_basis(x, y, width, axis=None):\n",
    "        arg = (x - y) / width\n",
    "        return np.exp(-0.5 * np.sum(arg ** 2, axis))\n",
    "        \n",
    "    def fit(self, X, y=None):\n",
    "        # create N centers spread along the data range\n",
    "        self.centers_ = np.linspace(X.min(), X.max(), self.N)\n",
    "        self.width_ = self.width_factor * (self.centers_[1] - self.centers_[0])\n",
    "        return self\n",
    "        \n",
    "    def transform(self, X):\n",
    "        return self._gauss_basis(X[:, :, np.newaxis], self.centers_,\n",
    "                                 self.width_, axis=1)\n",
    "    \n",
    "gauss_model = make_pipeline(GaussianFeatures(20),\n",
    "                            LinearRegression())\n",
    "gauss_model.fit(x[:, np.newaxis], y)\n",
    "yfit = gauss_model.predict(xfit[:, np.newaxis])\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, yfit)\n",
    "plt.xlim(0, 10);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "I've included this example just to make clear that there is nothing magic about polynomial basis functions: if you have some sort of intuition into the generating process of your data that makes you think one basis or another might be appropriate, you can use that instead."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Regularization\n",
    "\n",
    "The introduction of basis functions into our linear regression makes the model much more flexible, but it also can very quickly lead to overfitting (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this).\n",
    "For example, the following figure shows what happens if we use a large number of Gaussian basis functions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = make_pipeline(GaussianFeatures(30),\n",
    "                      LinearRegression())\n",
    "model.fit(x[:, np.newaxis], y)\n",
    "\n",
    "plt.scatter(x, y)\n",
    "plt.plot(xfit, model.predict(xfit[:, np.newaxis]))\n",
    "\n",
    "plt.xlim(0, 10)\n",
    "plt.ylim(-1.5, 1.5);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "With the data projected to the 30-dimensional basis, the model has far too much flexibility and goes to extreme values between locations where it is constrained by data.\n",
    "We can see the reason for this if we plot the coefficients of the Gaussian bases with respect to their locations, as shown in the following figure:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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NWzX72655RY88sgjWLJkCUwmE/7+979DIhneB7+tWLECjz32GDZs2ICcnBzMnTu33++hygCEEEICathNnRFCCBlYFGgIIYQEFAUaQgghAUWBhhBCSEBRoCGEEBJQFGgIcWLz5s14/vnnvf7+pqYmrF692q1rp0+f7vXP6a6trQ3ffvstAOCNN97AsWPH/NIuIb6gQENIgMTHx7sdaPzl1KlT2L59OwDgzjvvxMSJEwf05xPiyLDbsEmIJ4qKinDzzTdDrVbj/vvvx+zZs7F161Z89NFHMJvNYBgGr7zyCgDgwQcfBMuyMBgM+Pe//42IiAg89NBD2LRpE1544QXs378fZrMZl19+Oe68806HP6+4uBhPPvkk+Hw+wsLC8OSTTyIlJQWvvvoqtm3bBovFgsWLF2PRokVYv349Tpw4gba2NowZMwZr167Fxo0bUVJSgk8//RRHjhzBvHnzcMEFF+Dhhx9GdXU1LBYLbr31VsybNw9Lly7FmDFjcObMGajVavznP/9BamrqQN5eMkxQoCHEBbFYjDfeeANKpRILFizArFmzUF5ejjfeeANisRirVq3C7t27IZfLERUVhWeffRZnz56FVqu1ly4BgG+//Rbvv/8+EhISsHnzZqc/79FHH8VTTz2FvLw8bNu2DevWrcNdd92FXbt24bPPPoPFYsGGDRugUqkgl8vxzjvvwGq14sorr0RDQwPuuusufPLJJ1i4cCGOHDkCAPj0008RExOD559/Hmq1Gtdeey3+8Ic/AAAmTpyIf/3rX3jhhRfw/fffOw2AhPiCAg0hLhQUFIBhGMTGxiIiIgJtbW2IjY3FihUrIJVKce7cOUyePNkegO655x4IBALcfffdPdp57rnnsH79ejQ3N9uPqXCksbEReXl5AIDzzjsP69evR1lZGSZOnAg+nw8+n4+VK1fCZDJBqVTioYcegkQigVarhclkcthmaWkpLrzwQgC2orIjRoxAVVUVAFvdKgBISkpCc3Ozz/eLEEdojYYQF44fPw7AtrCv1WohFArx0ksv4YUXXsCaNWsQFhYGlmWxf/9+JCQk4O2338bdd9+NDRs22NswGo3YunUrNmzYgPfffx9ffvklampqHP68hIQElJSUAAAOHjyIrKws5OTkoLi4GFarFSaTCbfeeit27tyJuro6bNiwAQ899BD0ej1YlgWPx+tz4uGIESNw6NAhALYjIU6fPo20tLRA3C5CHKIRDSEu6PV63HTTTdBqtXjiiScgk8mQn5+PhQsXQiAQQC6Xo7GxEXPmzMFDDz2Ejz/+GGazGffee6+9DZFIhMjISFx//fUIDw/H9OnTkZKS4vDnrVmzBk8++aT9ILqnn34a6enpmDlzJhYvXgyr1YrFixdj0qRJeO2113DDDTeAYRikp6ejsbERGRkZOH36NN599117m9dffz0ee+wxLF68GAaDAffddx9iY2MDfesIsaOimoQQQgKKps4IIYQEFAUaQgghAUWBhhBCSEBRoCGEEBJQFGgIIYQEFAUaQgghAUWBhhBCSEBRoCGEEBJQ/x/+xDS1houLxgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def basis_plot(model, title=None):\n",
    "    fig, ax = plt.subplots(2, sharex=True)\n",
    "    model.fit(x[:, np.newaxis], y)\n",
    "    ax[0].scatter(x, y)\n",
    "    ax[0].plot(xfit, model.predict(xfit[:, np.newaxis]))\n",
    "    ax[0].set(xlabel='x', ylabel='y', ylim=(-1.5, 1.5))\n",
    "    \n",
    "    if title:\n",
    "        ax[0].set_title(title)\n",
    "\n",
    "    ax[1].plot(model.steps[0][1].centers_,\n",
    "               model.steps[1][1].coef_)\n",
    "    ax[1].set(xlabel='basis location',\n",
    "              ylabel='coefficient',\n",
    "              xlim=(0, 10))\n",
    "    \n",
    "model = make_pipeline(GaussianFeatures(30), LinearRegression())\n",
    "basis_plot(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The lower panel of this figure shows the amplitude of the basis function at each location.\n",
    "This is typical overfitting behavior when basis functions overlap: the coefficients of adjacent basis functions blow up and cancel each other out.\n",
    "We know that such behavior is problematic, and it would be nice if we could limit such spikes explicitly in the model by penalizing large values of the model parameters.\n",
    "Such a penalty is known as *regularization*, and comes in several forms."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Ridge Regression ($L_2$ Regularization)\n",
    "\n",
    "Perhaps the most common form of regularization is known as *ridge regression* or $L_2$ *regularization* (sometimes also called *Tikhonov regularization*).\n",
    "This proceeds by penalizing the sum of squares (2-norms) of the model coefficients $\\theta_n$. In this case, the penalty on the model fit would be: \n",
    "$$\n",
    "P = \\alpha\\sum_{n=1}^N \\theta_n^2\n",
    "$$\n",
    "where $\\alpha$ is a free parameter that controls the strength of the penalty.\n",
    "This type of penalized model is built into Scikit-Learn with the `Ridge` estimator (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "model = make_pipeline(GaussianFeatures(30), Ridge(alpha=0.1))\n",
    "basis_plot(model, title='Ridge Regression')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The $\\alpha$ parameter is essentially a knob controlling the complexity of the resulting model.\n",
    "In the limit $\\alpha \\to 0$, we recover the standard linear regression result; in the limit $\\alpha \\to \\infty$, all model responses will be suppressed.\n",
    "One advantage of ridge regression in particular is that it can be computed very efficiently—at hardly more computational cost than the original linear regression model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "### Lasso Regression ($L_1$ Regularization)\n",
    "\n",
    "Another common type of regularization is known as *lasso regression* or *L~1~ regularization* involves penalizing the sum of absolute values (1-norms) of regression coefficients:\n",
    "$$\n",
    "P = \\alpha\\sum_{n=1}^N |\\theta_n|\n",
    "$$\n",
    "Though this is conceptually very similar to ridge regression, the results can differ surprisingly. For example, due to its construction, lasso regression tends to favor *sparse models* where possible: that is, it preferentially sets many model coefficients to exactly zero.\n",
    "\n",
    "We can see this behavior if we duplicate the previous example using L1-normalized coefficients (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Lasso\n",
    "model = make_pipeline(GaussianFeatures(30), Lasso(alpha=0.001, max_iter=2000))\n",
    "basis_plot(model, title='Lasso Regression')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "With the lasso regression penalty, the majority of the coefficients are exactly zero, with the functional behavior being modeled by a small subset of the available basis functions.\n",
    "As with ridge regularization, the $\\alpha$ parameter tunes the strength of the penalty and should be determined via, for example, cross-validation (refer back to [Hyperparameters and Model Validation](05.03-Hyperparameters-and-Model-Validation.ipynb) for a discussion of this)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Example: Predicting Bicycle Traffic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "As an example, let's take a look at whether we can predict the number of bicycle trips across Seattle's Fremont Bridge based on weather, season, and other factors.\n",
    "We already saw this data in [Working With Time Series](03.11-Working-with-Time-Series.ipynb), but here we will join the bike data with another dataset and try to determine the extent to which weather and seasonal factors—temperature, precipitation, and daylight hours—affect the volume of bicycle traffic through this corridor.\n",
    "Fortunately, the National Oceanic and Atmospheric Administration (NOAA) makes its daily [weather station data](http://www.ncdc.noaa.gov/cdo-web/search?datasetid=GHCND) available—I used station ID USW00024233—and we can easily use Pandas to join the two data sources.\n",
    "We will perform a simple linear regression to relate weather and other information to bicycle counts, in order to estimate how a change in any one of these parameters affects the number of riders on a given day.\n",
    "\n",
    "In particular, this is an example of how the tools of Scikit-Learn can be used in a statistical modeling framework, in which the parameters of the model are assumed to have interpretable meaning.\n",
    "As discussed previously, this is not a standard approach within machine learning, but such interpretation is possible for some models.\n",
    "\n",
    "Let's start by loading the two datasets, indexing by date:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "deletable": true,
    "editable": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "# url = 'https://raw.githubusercontent.com/jakevdp/bicycle-data/main'\n",
    "# !curl -O {url}/FremontBridge.csv\n",
    "# !curl -O {url}/SeattleWeather.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "counts = pd.read_csv('FremontBridge.csv',\n",
    "                     index_col='Date', parse_dates=True)\n",
    "weather = pd.read_csv('SeattleWeather.csv',\n",
    "                      index_col='DATE', parse_dates=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For simplicity, let's look at data prior to 2020 in order to avoid the effects of the COVID-19 pandemic, which significantly affected commuting patterns in Seattle:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "counts = counts[counts.index < \"2020-01-01\"]\n",
    "weather = weather[weather.index < \"2020-01-01\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Next we will compute the total daily bicycle traffic, and put this in its own `DataFrame`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "daily = counts.resample('d').sum()\n",
    "daily['Total'] = daily.sum(axis=1)\n",
    "daily = daily[['Total']] # remove other columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We saw previously that the patterns of use generally vary from day to day. Let's account for this in our data by adding binary columns that indicate the day of the week:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "deletable": true,
    "editable": true,
    "tags": []
   },
   "outputs": [],
   "source": [
    "days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n",
    "for i in range(7):\n",
    "    daily[days[i]] = (daily.index.dayofweek == i).astype(float)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Similarly, we might expect riders to behave differently on holidays; let's add an indicator of this as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "from pandas.tseries.holiday import USFederalHolidayCalendar\n",
    "cal = USFederalHolidayCalendar()\n",
    "holidays = cal.holidays('2012', '2020')\n",
    "daily = daily.join(pd.Series(1, index=holidays, name='holiday'))\n",
    "daily['holiday'].fillna(0, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We also might suspect that the hours of daylight would affect how many people ride. Let's use the standard astronomical calculation to add this information (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8.0, 17.0)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWsAAAEECAYAAADu5BX3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABbiUlEQVR4nO29d5xcZ3no/52yMzu7s71Ku1p1WSvJvQE2Jhg7IgQntGtjYJ0A90MMAYNMsXEBY8uUEMpF+MIPhYTEhjgyH7i2g02ziQEXGUu2rDJqK2l7mdk2vZ/fH2fP7GjbnJlTx5zvX9LsnJlnzz7neZ/6vjZBEAQsLCwsLEyN3WgBLCwsLCwKYxlrCwsLizLAMtYWFhYWZYBlrC0sLCzKAMtYW1hYWJQBlrG2sLCwKAOcct504MAB/vmf/5kHH3yQHTt2EAgEABgaGuL888/nW9/6lqZCWlhYWPy5YyvUZ717924ee+wxPB4Pe/bsyb0+MzPDTTfdxO7du2ltbdVcUAsLC4s/ZwqmQbq6uti1a9eC13ft2sUHPvABy1BbWFhY6EDBNMj27dsZHBw867WJiQmef/55Pv/5zy953b59+5RLZ2FhYfFnyMUXX7zgNVk56/n88pe/5O1vfzsOh6PoL1wMn89Hd3d3KaIYTrnKbsmtL5bc+lOusi/l6JbUDfL8889z1VVXKRLIwsLCwkI+JRnr06dPs2rVKrVlsbCwsLBYAllpkM7OzrM6QX7xi19oJpCFhYWFxUKsoRgLCwuLMsAy1hYWFhZlgGWsLSwsLMoAy1hbWFhYlAGWsbawsLAoAyxjbWFhYWoSiQRXX3217PcPDg5y/fXXA7Bjxw6SyeSS773iiisWvDY9Pc3jjz++7Hcsdp3WlDTBaGFh8efBb3tD3PP751X9zOsvWcW7L+5U9TOXopQdQY8dO8bTTz/Nddddp4FEpWMZawsLC9MRiUT4zGc+QzAYpKurC4AXX3yR7373uwiCQCQS4Rvf+AYvvvgiZ86c4bbbbiOTyfCOd7yDb3/727nPufrqq3nyyScZHR3l9ttvx+l00tHRwdDQEA8++CDJZJJPf/rTDA8PU19fz3e+8x2+//3vc/ToUf7rv/6LG264YVH5lrru5ZdfJhqNcv/99/P1r3+dcDhMLBZjx44dXHnllYruiWWsLSwsluSa9TV84u3676/x8MMPs2nTJnbs2MGBAwfYu3cvJ06c4Otf/zptbW18//vf55e//CU9PT28613v4jOf+Qx/+MMfuPzyy3G73Qs+75/+6Z+4+eabedOb3sSePXsYGhoCIBqNsmPHDjo7O+np6cHn83HzzTfz8MMPL2mol7oOYN26ddx1112cOHGC6elp/uVf/oWJiQnOnDmj+J5YxtrCwsJ0nDlzhje96U0AnH/++TidTtra2rj//vupqqpibGyMiy66CK/Xy6WXXsof//hHfvazn/Gxj31s0c/r7e3lwgsvBMQN5qScdF1dHZ2dYkqmubmZWCwmS76lrlu7di0AGzdu5IYbbuDWW28lnU7T09NT4p2YwyowWlhYmI7169fzyiuvAHDkyBHS6TR33303X/7yl/nqV79Ka2sr0rkp119/PY888ggTExNs3rx50c/btGkTL7/8MiCefCVhs9kWvNdut5PNZpeVb7HrpGtBzHtHIhF+8IMf8NWvfpX77rtv+V9YBpZnbWFhYTpuvPFGPve5z3HjjTeybt06KioquPbaa3n/+9+Px+OhubmZ8fFxQPS8+/r6eP/737/k533mM5/hjjvu4F//9V+pqanB6Vza9HV1dXH8+HF+9KMf8fd///clyb9mzRoeeOABnnzySbLZLLfccktJn3MWgka89NJLst975MgRrcTQnHKV3ZJbXyy5tSOTyQjXX3+9EAqFzno9X/ZHH31UOHPmjCAIgrBnzx7h9ttv11XGYljKdlqetYWFRdkyMDDAxz/+cd71rnfh9XqXfN+KFSvYsWMHHo8Hu93Ol7/85YKf/dRTT/GjH/1owes33XQT1157rRKxS8Iy1hYWFmXLqlWrePTRRwu+79JLL+VnP/tZUZ/9lre8hbe85S2liqY6VoHRwsLCogyQZawPHDiQaz2ZmJjgox/9KO9///t573vfS39/v6YCWlhYWFjISIPs3r2bxx57DI/HA8DXv/51rrvuOt72trfxwgsvcOrUqdyEkYWFhYWFNhT0rLu6uti1a1fu//v372dsbIy///u/5/HHH+eyyy7TVEALCwsLC7AJwmxn+TIMDg5y6623smfPHrZu3cq9997Lu9/9br773e+SyWT45Cc/ueCaffv2UVVVJUuIeDxOZWVl8dKbgHKV3ZJbXyy59adcZY9Go1x88cULXi+6G6S+vj63XeHVV1+97K5W3d3y9hTw+Xyy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hvirv/orpqam+P73v7/gPXKLixYWFhYWhSkpDfKjH/2IK6+8kl/96lc8+uij3H777SQS8k47sLCwsLAonpI869raWioqxFHluro60uk0mczSY5IWFhYWFsooqc86Eolwxx134Pf7SaVS3HTTTVx33XVayGdhYWFhgYZDMalUijvuuIOhoSGSySQf/ehH2bBhA7fffjs2m42NGzfyxS9+EbtdzMT09fXx8Y9/nMcffxyA8fFxPvvZz5JKpairq+PrX/86Xq8+p4MolV3ixRdf5LOf/SzPPPNMWcg9PT3N9u3b2bRpEwDXXHMNf/d3f2d6uaPRKPfccw+Dg4OkUinuvvtuzjvvPNPLff/993P06FEA/H4/tbW17NmzR3O51ZB9eHiYz33ucwiCQF1dHd/4xjfweLQ/o1Gp3AMDA9x+++0IgsDKlSu57777dJFbFQSN+OlPfyrs3LlTEARBmJqaEt70pjcJ//AP/yC88MILgiAIwt133y38+te/FgRBEH7+858L73znO4U3vOENuet37twp/PznPxcEQRC+853vCP/2b/+mlaiqyy4IgjA8PCzcfPPNC143s9zPPvuscO+99+omr1pyf+c73xF+8IMfCIIgCD6fL6c3ZpdbIplMCu95z3uEo0eP6iK3GrLff//9wkMPPSQIgiB885vfFP7jP/6jLOT+xCc+ITz22GOCIAjCnj17hAceeEAXudVAswnGt771rXzyk5+UFgQcDgeHDx/msssuA+Cqq67iueeeA8S890MPPXTW9XfccQd/8zd/QzabZWRkhJoa/TYeUip7IpHgi1/8Ivfcc49uMqsh96FDhzh8+DAf+MAHuOWWWxgfHy8Luf/4xz9SUVHBhz/8Yf7v//2/vPGNbywLuSUeeughrrjiCs455xxd5Ablsnd3dxMMiifKLNe+aza5T548yVVXXQXARRddVFatfZoZ6+rqarxeL+FwmFtuuYVPfepTCIKQ23msurqaUEg8AfrNb34zVVVn7+xls9nIZDK8/e1vZ+/evbzuda/TSlTVZb/33nv50Ic+RFubvltLKpV73bp13HLLLTz00ENcc8017Ny5syzknpqaIhgM8sMf/pCrr76ar33ta2UhN0AymeThhx/mwx/+sC4yqyV7e3s7P/7xj/nrv/5rfv/73/PWt761LOTu7u7m6afFbUifeuopYrEY5YKme4OMjIxw00038bd/+7dcd911uTwSiEXK2trlT3GoqKjgiSee4L777uO2227TUtQFlCr72NgYL730Eg888AA9PT3MzMywY8cOvcRWdM9f97rXcfnllwNw7bXXcuTIEc3llVAid319PVdffTUgPqCHDh3SXF4JpTr+/PPPc+mll+oaOUookf2f/umf+MpXvsIvfvEL7rzzTl2fTyVy33bbbTz99NP09PRgs9loaDD/6T0SmhnrQCDAhz70IT772c/ynve8B4AtW7awd+9eAH7/+99zySWXLHn9PffcwwsvvACIq6WeewErkb2trY1f/epXPPjggzz44IPU1dXxrW99y/RyA9x111386le/AkQjsnXrVu2FRrncF198ca6I+6c//YkNGzZoLzTK5QZ47rnncmG5niiVvba2NrfAtLa25lIiWqNU7ueee44dO3bw4IMP4nA4eMMb3qCL3GqgWTfIzp07efLJJ1m3bl3utTvvvJOdO3eSSqVYt24dO3fuxOGYO/Xjiiuu4NlnnwWgt7c3l/O12+184Qtf0G2zKKWy57PU62aUe2BggDvuuAMAj8fDzp07aW1tNb3c09PT3HXXXfj9fpxOJ1/72tfo7Ow0vdwAH/nIR9ixY4fuW3kqlf3kyZPce++9ZLNZBEHgzjvvZMuWLaaX+8CBA3zpS1/C5XKxceNGvvCFL+RmRsyOZsbawsLCwkI9rP2sLSwsLMoAy1hbWFhYlAGWsbawsLAoAyxjbWFhYVEGWMbawsLCogwon3PmLSxksHfvXj71qU+xYcMGBEEgnU5z00038ba3vW3R9w8PD3P06NHcUI2FhVmxjLXFa47Xve51uUGkSCRCT08Pa9euXbSX+YUXXuDUqVOWsbYwPZaxtnhNU11dzQ033MATTzzBQw89xOjoKOPj41x99dXccsst/OAHPyAej3PhhRfS2dmZ2w+lvr6eL3/5y4aMgVtYLIaVs7Z4zdPU1MSRI0e44IIL+OEPf8hPf/pTHn74YRwOBx/5yEd4+9vfzlve8hbuvvtuvvjFL/Lggw9y1VVX8S//8i9Gi25hkcPyrC1e8wwPD3PhhRdy8OBBXnjhBbxeL8lkcsH7ent7+dKXvgSIm9yvWbNGZ0ktLJbGMtYWr2nC4TCPPPII73nPe4jFYtx777309fWxZ88eBEHAbreTzWYBWLt2LV/72tdYuXIl+/btw+/3Gyy9hcUclrG2eM3xwgsv0NPTg91uJ5PJ8IlPfIK1a9fy6U9/mldeeQWXy8Xq1asZHx9n06ZNfO9732Pr1q3cc8893HbbbaTTaWw2G/fff7/Rv4qFRQ5rIycLCwuLMsAqMFpYWFiUAZaxtrCwsCgDLGNtYWFhUQZYxtrCwsKiDLCMtYWFhUUZYBlrCwsLizLAMtYWFhYWZcD/D3oDGKBy01TyAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def hours_of_daylight(date, axis=23.44, latitude=47.61):\n",
    "    \"\"\"Compute the hours of daylight for the given date\"\"\"\n",
    "    days = (date - pd.datetime(2000, 12, 21)).days\n",
    "    m = (1. - np.tan(np.radians(latitude))\n",
    "         * np.tan(np.radians(axis) * np.cos(days * 2 * np.pi / 365.25)))\n",
    "    return 24. * np.degrees(np.arccos(1 - np.clip(m, 0, 2))) / 180.\n",
    "\n",
    "daily['daylight_hrs'] = list(map(hours_of_daylight, daily.index))\n",
    "daily[['daylight_hrs']].plot()\n",
    "plt.ylim(8, 17)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "We can also add the average temperature and total precipitation to the data.\n",
    "In addition to the inches of precipitation, let's add a flag that indicates whether a day is dry (has zero precipitation):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "weather['Temp (F)'] = 0.5 * (weather['TMIN'] + weather['TMAX'])\n",
    "weather['Rainfall (in)'] = weather['PRCP']\n",
    "weather['dry day'] = (weather['PRCP'] == 0).astype(int)\n",
    "\n",
    "daily = daily.join(weather[['Rainfall (in)', 'Temp (F)', 'dry day']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Finally, let's add a counter that increases from day 1, and measures how many years have passed.\n",
    "This will let us measure any observed annual increase or decrease in daily crossings:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "daily['annual'] = (daily.index - daily.index[0]).days / 365."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Now our data is in order, and we can take a look at it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total</th>\n",
       "      <th>Mon</th>\n",
       "      <th>Tue</th>\n",
       "      <th>Wed</th>\n",
       "      <th>Thu</th>\n",
       "      <th>Fri</th>\n",
       "      <th>Sat</th>\n",
       "      <th>Sun</th>\n",
       "      <th>holiday</th>\n",
       "      <th>daylight_hrs</th>\n",
       "      <th>Rainfall (in)</th>\n",
       "      <th>Temp (F)</th>\n",
       "      <th>dry day</th>\n",
       "      <th>annual</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2012-10-03</th>\n",
       "      <td>14084.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.277359</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-04</th>\n",
       "      <td>13900.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.219142</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.5</td>\n",
       "      <td>1</td>\n",
       "      <td>0.002740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-05</th>\n",
       "      <td>12592.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.161038</td>\n",
       "      <td>0.0</td>\n",
       "      <td>59.5</td>\n",
       "      <td>1</td>\n",
       "      <td>0.005479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-06</th>\n",
       "      <td>8024.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.103056</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60.5</td>\n",
       "      <td>1</td>\n",
       "      <td>0.008219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012-10-07</th>\n",
       "      <td>8568.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.045208</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60.5</td>\n",
       "      <td>1</td>\n",
       "      <td>0.010959</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Total  Mon  Tue  Wed  Thu  Fri  Sat  Sun  holiday  daylight_hrs  \\\n",
       "Date                                                                            \n",
       "2012-10-03  14084.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0      0.0     11.277359   \n",
       "2012-10-04  13900.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0      0.0     11.219142   \n",
       "2012-10-05  12592.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0      0.0     11.161038   \n",
       "2012-10-06   8024.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0      0.0     11.103056   \n",
       "2012-10-07   8568.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0      0.0     11.045208   \n",
       "\n",
       "            Rainfall (in)  Temp (F)  dry day    annual  \n",
       "Date                                                    \n",
       "2012-10-03            0.0      56.0        1  0.000000  \n",
       "2012-10-04            0.0      56.5        1  0.002740  \n",
       "2012-10-05            0.0      59.5        1  0.005479  \n",
       "2012-10-06            0.0      60.5        1  0.008219  \n",
       "2012-10-07            0.0      60.5        1  0.010959  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "daily.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "With this in place, we can choose the columns to use, and fit a linear regression model to our data.\n",
    "We will set `fit_intercept=False`, because the daily flags essentially operate as their own day-specific intercepts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "# Drop any rows with null values\n",
    "daily.dropna(axis=0, how='any', inplace=True)\n",
    "\n",
    "column_names = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun',\n",
    "                'holiday', 'daylight_hrs', 'Rainfall (in)',\n",
    "                'dry day', 'Temp (F)', 'annual']\n",
    "X = daily[column_names]\n",
    "y = daily['Total']\n",
    "\n",
    "model = LinearRegression(fit_intercept=False)\n",
    "model.fit(X, y)\n",
    "daily['predicted'] = model.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Finally, we can compare the total and predicted bicycle traffic visually (see the following figure):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "daily[['Total', 'predicted']].plot(alpha=0.5);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "From the fact that the data and model predictions don't line up exactly, it is evident that we have missed some key features.\n",
    "Either our features are not complete (i.e., people decide whether to ride to work based on more than just these features), or there are some nonlinear relationships that we have failed to take into account (e.g., perhaps people ride less at both high and low temperatures).\n",
    "Nevertheless, our rough approximation is enough to give us some insights, and we can take a look at the coefficients of the linear model to estimate how much each feature contributes to the daily bicycle count:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mon              -3309.953439\n",
       "Tue              -2860.625060\n",
       "Wed              -2962.889892\n",
       "Thu              -3480.656444\n",
       "Fri              -4836.064503\n",
       "Sat             -10436.802843\n",
       "Sun             -10795.195718\n",
       "holiday          -5006.995232\n",
       "daylight_hrs       409.146368\n",
       "Rainfall (in)    -2789.860745\n",
       "dry day           2111.069565\n",
       "Temp (F)           179.026296\n",
       "annual             324.437749\n",
       "dtype: float64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = pd.Series(model.coef_, index=X.columns)\n",
    "params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "These numbers are difficult to interpret without some measure of their uncertainty.\n",
    "We can compute these uncertainties quickly using bootstrap resamplings of the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.utils import resample\n",
    "np.random.seed(1)\n",
    "err = np.std([model.fit(*resample(X, y)).coef_\n",
    "              for i in range(1000)], 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "With these errors estimated, let's again look at the results:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                effect  uncertainty\n",
      "Mon            -3310.0        265.0\n",
      "Tue            -2861.0        274.0\n",
      "Wed            -2963.0        268.0\n",
      "Thu            -3481.0        268.0\n",
      "Fri            -4836.0        261.0\n",
      "Sat           -10437.0        259.0\n",
      "Sun           -10795.0        267.0\n",
      "holiday        -5007.0        401.0\n",
      "daylight_hrs     409.0         26.0\n",
      "Rainfall (in)  -2790.0        186.0\n",
      "dry day         2111.0        101.0\n",
      "Temp (F)         179.0          7.0\n",
      "annual           324.0         22.0\n"
     ]
    }
   ],
   "source": [
    "print(pd.DataFrame({'effect': params.round(0),\n",
    "                    'uncertainty': err.round(0)}))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The `effect` column here, roughly speaking, shows how the number of riders is affected by a change of the feature in question.\n",
    "For example, there is a clear divide when it comes to the day of the week: there are thousands fewer riders on weekends than on weekdays.\n",
    "We also see that for each additional hour of daylight, 409 ± 26 more people choose to ride; a temperature increase of one degree Fahrenheit encourages 179 ± 7 people to grab their bicycle; a dry day means an average of 2,111 ± 101 more riders,\n",
    "and every inch of rainfall leads 2,790 ± 186 riders to choose another mode of transport.\n",
    "Once all these effects are accounted for, we see a modest increase of 324 ± 22 new daily riders each year.\n",
    "\n",
    "Our simple model is almost certainly missing some relevant information. For example, as mentioned earlier, nonlinear effects (such as effects of precipitation *and* cold temperature) and nonlinear trends within each variable (such as disinclination to ride at very cold and very hot temperatures) cannot be accounted for in a simple linear model.\n",
    "Additionally, we have thrown away some of the finer-grained information (such as the difference between a rainy morning and a rainy afternoon), and we have ignored correlations between days (such as the possible effect of a rainy Tuesday on Wednesday's numbers, or the effect of an unexpected sunny day after a streak of rainy days).\n",
    "These are all potentially interesting effects, and you now have the tools to begin exploring them if you wish!"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "jupytext": {
   "formats": "ipynb,md"
  },
  "kernelspec": {
   "display_name": "Python 3.9.6 64-bit ('3.9.6')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  },
  "vscode": {
   "interpreter": {
    "hash": "513788764cd0ec0f97313d5418a13e1ea666d16d72f976a8acadce25a5af2ffc"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
